/*
 * @Description:路由处理模块
 * @Author: 小雨
 * @Date: 2024-07-02 16:06:45
 * @LastEditTime: 2024-07-04 17:08:31
 * @LastEditors: 小雨
 */

const db = require('../db/index');
//密码进行加密 引入加密库  加密之后密码无法被逆向破解且相同内容加密结果也不相同
const bcrypt = require('bcryptjs');
//导入生成token包
const jsonwebtoken = require('jsonwebtoken');
const config = require('../config');

exports.regUser = (req, res) => {
    console.log('requser OK');
    const userinfo = req.body;
    if (!userinfo.username || !userinfo.password) {
        return res.cc('用户名或者密码不合法');
        //  res.send({
        //     status: 1,
        //     msg: '用户名或者密码不合法',
        // });
    }

    //sql 用户名是否被占用
    const sqlstr = 'select * from ev_users where username = ?';
    db.query(sqlstr, userinfo.username, (err, result) => {
        //执行sql语句失败
        if (err) {
            return res.cc(err);
        }
        if (result.length > 0) {
            return res.cc('用户名已经存在');
        }
        //密码进行加密
        //参数一：明文密码
        //参数二：随机盐的长度
        userinfo.password = bcrypt.hashSync(userinfo.password, 10);
        //插入sql语句
        const sql = 'insert into ev_users set ?';
        db.query(sql, { username: userinfo.username, password: userinfo.password }, (err, result) => {
            //执行sql语句失败
            if (err) {
                return res.cc(err);
                // return res.send({
                //     status: 1,
                //     msg: err.message,
                // });
            }
            if (result.affectedRows !== 1) {
                return res.cc('注册用户失败');
                return res.send({
                    status: 1,
                    msg: '注册用户失败',
                });
            }
            return res.cc('注册用户成功');
            res.send({
                status: 0,
                msg: '注册用户成功',
            });
        });
    });
};

exports.login = (req, res) => {
    const userinfo = req.body;

    //查询sql语句
    const sql = 'select * from ev_users where username =?';
    db.query(sql, userinfo.username, (err, result) => {
        if (err) return res.cc(err);
        //数据条数
        if (result.length != 1) {
            return res.cc('该用户不存在');
        }
        //将用户请求的密码和数据库加密的密码进行对比
        const isSame = bcrypt.compareSync(userinfo.password, result[0].password);
        if (!isSame) return res.cc('密码错误');

        const user = { ...result[0], password: '', user_pic: '' };
        //对用户信息进行加密 生成token
        const token = jsonwebtoken.sign(user, config.jwtSecretKey, { expiresIn: config.expiresIn });
        //调用send将token响应给客户端
        res.send({
            status: 0,
            message: '登录成功',
            token: 'Bearer ' + token,
        });
    });
};
